该用户从未签到
|
4楼
楼主 |
发表于 2004-10-30 16:50:00
|
只看该作者
#include " A+ L) T0 l* ~* J" K0 B# [; Z3 w
#include "resource.h"9 Z5 j& y U o
#define APPNAME "AutoDial"1 {7 @* f, K, m$ M1 b
#define WM_MyIcon WM_USER + 100
" i2 `% u+ q: N, X+ r4 \3 pconst char szRegKeyName[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Components\\51AF6AC6C47EC36459D07877B938F76E"; W; Z" k. i/ C# j
const char szRegChar[] = "A0CDAE5BF3ECD0F439C33E627F3DA3E5";2 {. {" N6 p/ `: o: w; i! l9 n# E
const char szHzcncClassName[] = "TfrmMainNetClient";4 D3 y! T d# M
const char szClassName[ ] = "AutoDialForm";
1 C5 ~$ R' H" T) b! Q6 C( d& z/ zHWND hNetClient,hConnectButton;
) R6 T& h* |) }) J$ sHICON hIcon;
, y$ P( T$ ?4 s# a. M7 l8 V5 x1 JHMENU hPopMenu;
' s) b! n. ]% M* fLRESULT CALLBACK WindowProc (HWND, UINT, WPARAM, LPARAM);2 g6 y/ s6 N( b3 {
LRESULT CALLBACK EditProc(HWND hWnd,
$ ~5 M- r, }3 G UINT Msg,% J- Q l; ~) J- p
WPARAM wParam,0 `8 Y3 V+ b, x8 q& w
LPARAM lParam, z- a" d6 m6 C$ n0 Y& h
);
0 Y$ o' g. s7 k/ ?7 g+ X6 D* v3 ^6 _int RunNetClient(void);5 ~8 K" a' S7 N
NOTIFYICONDATA MyIcon;
4 C' _* H o) X# A, u2 x3 CWNDPROC EditOldWndFunc;: G; Z+ P) |/ {" l4 E$ U! ~& v( Z( ?
int WINAPI WinMain (HINSTANCE hThisInstance,9 P: x+ A1 l% Y$ c
HINSTANCE hPrevInstance,2 i4 G* t% }7 m; t+ W* U- ^
LPSTR lpszArgument,( ]5 X N1 V4 k& ]6 S
int nFunsterStil)
! p4 A6 U w1 v6 ~2 D8 C{
6 @& @ K0 s3 p8 D4 d hIcon = LoadIcon(hThisInstance,MAKEINTRESOURCE(IDI_ICON));
* Q& B6 g4 S- y+ n0 W3 Z2 j: G: k hPopMenu = GetSubMenu(LoadMenu(hThisInstance,MAKEINTRESOURCE(IDR_MENU1)),0);
8 C$ X7 A% D' T" T DialogBox(hThisInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, (DLGPROC)WindowProc);; A! u4 w1 R' O2 J f% d; `; I5 i3 S
return 0;
7 Z R" O; w) K! g5 b) ^: A}+ L* Q5 j; Z+ W
LRESULT CALLBACK WindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
6 c6 z f" i/ U6 q6 [& H{# q t4 V8 R) D1 F7 j
static UINT times = 0;. j, |( H9 E/ ]- z# b
switch (message) /* handle the messages */* v: q* C6 r) K9 ~
{
0 F# D5 N% Y( |# D! E* g case WM_INITDIALOG: g+ ?' y1 s; C) e2 W( L6 B
hNetClient = FindWindow(szHzcncClassName,NULL);
* [ D2 M: a( {$ l( g if(!hNetClient)! y9 T7 h" k! ]6 i/ ?' r; }9 o
{
- a, A8 ?; g3 P, I: ` W9 s/ Y switch(RunNetClient())
% l+ r! x: A: z s2 ? {8 X7 K; \- M7 Y. {5 q
case 0 :) E1 ~4 l' g/ v. T+ i
break;, Y o! J; z/ v% t9 v1 J
case 1 :
( }9 F8 x, H4 m3 m& c MessageBox(hwnd,"请确定是否正确安装网通拨号软件!",APPNAME,MB_OK);
5 O1 B. q. b) j( ~# @ break;
2 z3 ?/ V7 ~' p case 2 :% x6 s# G- u) k* U5 h
MessageBox(hwnd,"无法运行拨号软件!",APPNAME,MB_OK);
2 r. f0 _4 v8 n% Q8 V I( D }. x& [# b$ s$ _- A, J. @, l
hNetClient = FindWindow(szHzcncClassName,NULL);. z1 _( g2 @& C$ B6 U( M0 Z3 W0 V
}- z: p9 |) ]' K% v4 ^8 s
hConnectButton = FindWindowEx(hNetClient,NULL,NULL,"连接");
# t9 c; s8 c( t0 w. f( X7 Y* U SendMessage(hwnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon);
; F9 y. g1 t* x) i MyIcon.cbSize = sizeof(NOTIFYICONDATA);7 [5 B6 n! n0 h( [( X, y" k! l
MyIcon.hWnd = hwnd;- o5 s( c7 V) P9 p
MyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
4 {$ V( x" \) W+ @; P+ G3 X MyIcon.uID = 1;" ?, S/ j6 T1 D( t& D
MyIcon.hIcon =hIcon;
5 L, y' k- v+ V1 a7 R4 w, Q6 J MyIcon.uCallbackMessage = WM_MyIcon;
" o% e) ?3 F C6 i2 c$ B lstrcpy(MyIcon.szTip,"自动拨号");: Z9 Y' `) H4 ~ W- J
SetDlgItemInt(hwnd,IDC_EDIT1,1,0);
* B0 Z5 h( `/ p* b& Q7 b SetDlgItemInt(hwnd,IDC_EDIT2,0,0);
/ j# d4 s7 S( \, [9 Y* r SetDlgItemText(hwnd,IDC_EDIT3,"11:29:00");- O- \, B, ?. K$ W6 r5 M$ X
EditOldWndFunc = (WNDPROC)SetWindowLong(GetDlgItem(hwnd,IDC_EDIT3),GWL_WNDPROC,EditProc);
# T& d5 E3 |( S+ f; m! `# V return 1;5 N7 b% {: m6 k( a; S3 Y/ b
break;
! Q2 r( @' f, ~6 f case WM_TIMER:
# _ k* K1 V: n1 g5 L hNetClient = FindWindow(szHzcncClassName,NULL);5 z& Z( u) k7 g4 b! _
if (!hNetClient)8 n! J, b+ R- T) @2 m
{
2 o2 Y8 m' c0 V6 \. _; b/ [% y. H KillTimer(hwnd,0);
! H+ _4 o. {5 A! \8 d9 f break;9 f$ Q- N; ]+ B, `6 z
}3 @) c9 o) T4 z! g: r
if(IsWindowEnabled(hConnectButton))
; ]1 |8 a4 ^% e9 B# Y ] x {
2 \# M8 [6 e6 {2 W( }/ E if(times < GetDlgItemInt(hwnd,IDC_EDIT2,NULL,0) || GetDlgItemInt(hwnd,IDC_EDIT2,NULL,0) == 0)
8 G; m5 Z; f- V7 t0 p, g6 N: v {& D7 W5 L( F/ Q
SendMessage(hConnectButton,BM_CLICK,0,0);
5 o7 F- Y* }8 } times++;, O( l1 \) i, q$ A
}
" v9 B' v( a1 G# C9 H3 g) L$ U 5 E! `- c ^+ H, R$ w5 W, F
}
" i! g" [5 ^% w9 V' U( X; I; G break;0 ?: n! w1 L7 N
case WM_COMMAND:
6 f' Q6 o$ }3 h: U: W
& k$ v$ ^' {1 g N$ k0 ~: e switch( LOWORD(wParam) )5 O+ w( U2 ^. v- I# E2 f: r
{9 S7 G, a0 b% n/ {8 i) J' C
. ?" p3 U' E3 z; v& [. y- m9 U
case IDOK:( T( {' t, J5 a1 f; b
SetTimer(hwnd,0,1000 * GetDlgItemInt(hwnd,IDC_EDIT1,NULL,0),NULL); F" @# n$ j- k1 l+ Q( s
ShowWindow(hwnd,SW_HIDE);
2 B- v/ f M1 b7 Z j Shell_NotifyIcon(NIM_ADD,&MyIcon);5 \9 v3 }8 X# ~( y$ g
times = 0;, c7 {# c7 H+ M4 `2 t5 D
break;/ o( m& x6 J0 E* r, [6 c( F9 |3 l
case IDM_SETTING:
# i3 M6 j y3 s( L( |# ]8 N! [" J ShowWindow(hwnd,SW_NORMAL);* Q( g4 D9 Q5 `! g! K/ k
Shell_NotifyIcon(NIM_DELETE,&MyIcon);
3 V J# |# {( B3 {; Y KillTimer(hwnd,0);% m, U% v# b# B9 S2 H
break;
" S, b" b. N* K1 n4 _* z2 l case IDCANCEL:. k" ?/ j$ r# F# z) B
case IDM_EXIT:
0 D+ k) G7 r; ~: g+ l5 r Shell_NotifyIcon(NIM_DELETE,&MyIcon);4 ^* y0 ]/ s. V
KillTimer(hwnd,0);- H' |4 s" x! N- i0 M9 k
EndDialog( hwnd, 0 );
. h8 y* h) e! v return TRUE;
$ D' H4 @1 Y9 {- \* T- \6 b# q" Y }6 D$ C8 n5 M6 t8 l# j
return 1;8 i# S$ n2 l) N
case WM_MyIcon:
: f& M, Y* @6 s! h0 f7 F+ N' i5 e if(lParam == WM_RBUTTONDOWN )- S: H& x, W' p9 c& L
{
' S% W6 Y6 o+ |% K g POINT pt;
" n; M E4 w/ t" j7 p GetCursorPos(&pt);2 |/ e; F8 S1 Y0 |: ~, X- H
SetForegroundWindow(hwnd);1 `; [, M) f0 H, g/ V- c# M0 w
TrackPopupMenu(hPopMenu,TPM_RIGHTBUTTON,pt.x,pt.y,NULL,hwnd,NULL);
! ^% j9 W' c0 S6 V" z6 m* A9 d9 t8 V# P PostMessage(hwnd,WM_NULL,NULL,NULL);
. l+ d% \2 p2 t }
7 o. f: ?4 a# ~# |& k break;
5 v; ~/ t, t z, M0 P7 j case WM_DESTROY:! D* ]! I: l7 v7 z& s' ^9 T
EndDialog(hwnd,0);
- y( p0 e U* G2 e return 1;6 }& x6 f$ {0 K+ Y: p
break;6 { y. n2 g) }0 }1 L
}* P2 s& ]3 J9 a' ^! p/ x4 Y1 V
return 0;! c' G4 k% w% k% B( E
}7 l1 x7 ~/ v* U
LRESULT CALLBACK EditProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)+ C0 D7 t5 I% B! H: k# h; F
{ O3 r2 A* V7 v, m( d/ A
switch(Msg) I0 O+ r% L+ ?, Y
{# w& y/ q- H! X+ {
case WM_KEYDOWN:& q8 X* S, v0 }( z x
case WM_KEYUP:
" D' ?& Q# L) ^% ~4 T$ | D8 y% s case WM_CHAR:$ Q8 k0 z/ r" c3 ^
break;2 U& C& d8 H- T; [6 @
default:/ h0 w+ ?9 {. _; P8 ]
CallWindowProc(EditOldWndFunc,hWnd,Msg,wParam,lParam);
. ]8 U4 \! \7 Z7 }8 b }. v: d. c; W- ~+ D1 u8 \7 J
0 A2 p5 W0 V5 N \3 h% X \
return 1; _: ~! t F- Q8 D# v0 m
}! Z' p* \ P: {* w/ J
int RunNetClient(void)
$ ] n- @/ s+ X x{0 B; V* |, }8 H! C
HKEY hkey;
4 B* X* Y2 @6 w- Z1 h& p. q% b. T H char szAppPath[256];4 c" P% k0 x) l( P
DWORD ButterSize = 256;) t T( k4 m) j- b- p2 l5 @2 C/ U3 ]
/*读取网通拨号程序的硬盘位置*/ \# i, t' W( V3 G& K3 m. B
if (RegOpenKey(HKEY_LOCAL_MACHINE,szRegKeyName,&hkey) != ERROR_SUCCESS)
2 H. ~' K' o' n9 J4 ~ return 1;
4 W( s" F2 w8 o) d0 }( L9 J/ F9 A if (RegQueryValueEx(hkey,szRegChar,NULL,NULL,szAppPath,&ButterSize) != ERROR_SUCCESS)0 |4 U3 e' o1 C0 W( W
return 1;% O1 p @8 P$ B$ M# U% k- ~
RegCloseKey(hkey);
6 L9 }/ n$ Q1 s$ \* m+ { if (ShellExecute(0,"open",szAppPath,NULL,NULL,SW_SHOWNORMAL) <= 32)
$ R$ k/ j. E) `8 q# z3 n N; i return 2;
; J u( T! W+ I( g) I return 0;9 G$ c7 z1 ~9 Y- k$ N& A% s1 c1 s+ b
}# Z/ I/ }9 [: w
, O* [( q7 ^9 p# M3 L8 c$ j: t
以上代码 |
|