该用户从未签到
|
4楼
楼主 |
发表于 2004-10-30 16:50:00
|
只看该作者
#include
; V" [ s4 A9 \( X1 W8 Q" Y#include "resource.h"
! q3 }! k0 q% K# \+ W2 a, f6 v#define APPNAME "AutoDial"
0 ~ p# m2 w% z& H- z6 {- \#define WM_MyIcon WM_USER + 100
! U% S- n( ]' c: cconst char szRegKeyName[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Components\\51AF6AC6C47EC36459D07877B938F76E";' y f' C0 y) u7 j; x
const char szRegChar[] = "A0CDAE5BF3ECD0F439C33E627F3DA3E5";7 {, b$ a8 l% ?3 A
const char szHzcncClassName[] = "TfrmMainNetClient";
+ }: Y3 [9 W/ O+ u" ~3 L+ E& u( Econst char szClassName[ ] = "AutoDialForm";
$ S* K6 X* ]1 ZHWND hNetClient,hConnectButton;
. t! y8 N& t- c: o7 GHICON hIcon;! e3 k4 s; Z4 _* d- B( `, c% a
HMENU hPopMenu;
0 P, U0 E* C. r$ ELRESULT CALLBACK WindowProc (HWND, UINT, WPARAM, LPARAM);
& ]' T- z+ M: N" nLRESULT CALLBACK EditProc(HWND hWnd,
+ Y) Z9 P' f0 s) X* a* c UINT Msg,
% o7 D6 w) e N8 D$ N6 y8 s8 g5 b WPARAM wParam,
0 R" `% l D/ [1 A8 A LPARAM lParam( o) a: A6 m* s
);
2 j$ l4 x' t5 Y0 {$ S7 S4 nint RunNetClient(void);$ N6 o) c& o+ U% h1 p4 H. x
NOTIFYICONDATA MyIcon;
6 x. ?) x, b% X% O5 M2 kWNDPROC EditOldWndFunc;5 `7 B: g. V1 G$ `, k ^
int WINAPI WinMain (HINSTANCE hThisInstance,: U; s9 B1 P* j t# \% k3 {1 Z
HINSTANCE hPrevInstance,4 w R$ k8 ~5 Q/ ^7 d
LPSTR lpszArgument,
" F* F0 @. s; S% F, G* u int nFunsterStil)6 G7 r- b3 E/ _8 D+ T& R
{6 h0 k# y" M% Z& k/ b
hIcon = LoadIcon(hThisInstance,MAKEINTRESOURCE(IDI_ICON));
# [: N4 f: W- ?' {1 r. v hPopMenu = GetSubMenu(LoadMenu(hThisInstance,MAKEINTRESOURCE(IDR_MENU1)),0);0 N8 Y& F" L7 n$ h! y6 b, g
DialogBox(hThisInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, (DLGPROC)WindowProc);1 y ?, _9 }7 }
return 0;8 i: V$ `8 f+ K( S* b" S7 \- T
}
2 A6 B7 `# W& h+ |! J$ D$ C( MLRESULT CALLBACK WindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)% o. c" O0 g3 A: j) R$ z3 [6 Q
{5 @# Q! i( S7 O% j' a0 v% p9 g
static UINT times = 0;
9 S) o5 @+ N* f8 E( O6 e2 r switch (message) /* handle the messages */
( O7 Z2 B, P% j3 I! F6 ]1 N, h {# k/ u5 ~( v, J8 e) ^* F
case WM_INITDIALOG:/ Z( L' W7 r, h$ X1 w. A0 c
hNetClient = FindWindow(szHzcncClassName,NULL);
2 E; e. o9 [8 g if(!hNetClient)
+ t4 a5 m0 X( f {& C, E ?4 T: f' b
switch(RunNetClient())
" D2 c* z3 Z& z x, i; S5 p {3 H( V* Y. Z' q; u0 T
case 0 :
- `% n6 l. Y2 J break;
: I5 \8 j$ u$ `! J) N+ \, G2 t case 1 :& G# x" ~5 t" C+ q3 A
MessageBox(hwnd,"请确定是否正确安装网通拨号软件!",APPNAME,MB_OK);
, G% T6 [/ _- @' `8 N2 z break;
7 t& X/ p# t3 D4 U1 z6 b case 2 :. I4 y* U) f* A! D; M: Y4 s
MessageBox(hwnd,"无法运行拨号软件!",APPNAME,MB_OK);9 u) C! H1 Q; p$ ~2 z5 m6 H5 D
}( d$ H, ~" {0 ^5 P1 S0 G
hNetClient = FindWindow(szHzcncClassName,NULL);
& X+ \# J% L9 f7 Y. o }: q& @' q5 f% ]' G0 V @
hConnectButton = FindWindowEx(hNetClient,NULL,NULL,"连接");" m* w5 A5 _( z) _
SendMessage(hwnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon);
+ B: ^4 T: H/ z7 [ MyIcon.cbSize = sizeof(NOTIFYICONDATA);3 q+ l. M7 x1 ]) M( P" i2 E
MyIcon.hWnd = hwnd;& Q9 @, E5 N- E; _, b5 _8 I- F
MyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;, ` p2 M2 L! q
MyIcon.uID = 1;! l; I& R: D+ @& e; ^( n
MyIcon.hIcon =hIcon;
I* D# O5 I! M; ?9 B$ L8 ? MyIcon.uCallbackMessage = WM_MyIcon;
2 d4 g3 n- j) G lstrcpy(MyIcon.szTip,"自动拨号");
$ Y5 D ?2 t. P a/ Y! }* s8 } \ SetDlgItemInt(hwnd,IDC_EDIT1,1,0);
# L( g. }$ ]6 f- @) _ i2 a5 I8 \ SetDlgItemInt(hwnd,IDC_EDIT2,0,0);
5 |2 o7 y9 s1 n' y# G; `0 t% A1 {5 F6 h SetDlgItemText(hwnd,IDC_EDIT3,"11:29:00");
1 Z/ z" X& a- l EditOldWndFunc = (WNDPROC)SetWindowLong(GetDlgItem(hwnd,IDC_EDIT3),GWL_WNDPROC,EditProc);
) Q2 p* r5 c. u return 1;
2 O# U1 ~/ E" y( G+ u+ s) f break;" M/ _' X8 n3 f+ j' t. J* s1 \
case WM_TIMER:
1 H6 P, {. \ o: c. l( z7 O$ X hNetClient = FindWindow(szHzcncClassName,NULL);- a& U) p, \- J
if (!hNetClient)
5 `2 M5 A. F4 d {
/ a2 A7 A' a# U J KillTimer(hwnd,0);( a; G% n* q9 g9 M0 G
break; `) n% p" u: T% N3 D5 z
}
1 m7 _5 h% ?- n if(IsWindowEnabled(hConnectButton))
: u2 u9 P$ p6 S$ ~: G2 H; ^- u( b {7 A* l1 y* _0 K. Z8 i: d
if(times < GetDlgItemInt(hwnd,IDC_EDIT2,NULL,0) || GetDlgItemInt(hwnd,IDC_EDIT2,NULL,0) == 0)
0 Q0 q% N4 t% ^5 Z7 B! o {
& s d; c9 j- T: w SendMessage(hConnectButton,BM_CLICK,0,0);
, O ]9 J7 G3 [" n' D' M* `& d times++;
/ ?5 n' L/ t+ [# f. y9 u7 k. V3 x }
1 n" ^# v+ A0 H# l, e5 L
' t7 Z; s0 T& c2 r% z; P, T( o }
) [3 }; _% S- L2 u0 y break;3 C* H/ ]( V3 M5 @( u
case WM_COMMAND:
4 o: j1 T2 o& w3 e9 V1 y
+ p0 }4 b0 s2 l switch( LOWORD(wParam) )+ r9 a) w6 J. [
{
, ?4 b" q/ x. H4 ?' T : J4 ?! l) H. l
case IDOK:
. ]# @, H7 X4 U" @ u' _: J SetTimer(hwnd,0,1000 * GetDlgItemInt(hwnd,IDC_EDIT1,NULL,0),NULL);8 o0 b7 z# k m) i
ShowWindow(hwnd,SW_HIDE);
9 V% g2 [( T: l' I Shell_NotifyIcon(NIM_ADD,&MyIcon);
; D1 K8 g8 n% c6 d" C* t' G* C times = 0;/ k3 }# L W& j. {$ J0 Y* X4 x
break;
4 F2 b* ^9 |1 h case IDM_SETTING:
9 c" ]2 X( \( ]+ p6 Y ShowWindow(hwnd,SW_NORMAL);
# q: F6 Y$ r w- N, g5 [ X/ f Shell_NotifyIcon(NIM_DELETE,&MyIcon);$ h F# @3 I3 l4 T `' u7 n, f, p( h
KillTimer(hwnd,0);# X; ]/ J1 r6 E# a; N+ h
break;( K& z3 n8 r2 ]/ ~# T
case IDCANCEL:4 Z, e5 g( \, v
case IDM_EXIT:
8 z) L/ I! y* n% W Shell_NotifyIcon(NIM_DELETE,&MyIcon);
% r4 D( |$ L! p; u- x8 \9 |9 j KillTimer(hwnd,0);
' [" T0 _1 @6 n8 d+ E EndDialog( hwnd, 0 );
. }$ c- A% N# X# { return TRUE;9 n/ \2 f" S7 Y, h( u* k/ P# P# f4 `
}
& J( E* v2 m1 u return 1;4 V$ J6 y4 }$ F
case WM_MyIcon:8 D7 Y0 g F7 e! V& Z) b/ X8 q; F" A- R
if(lParam == WM_RBUTTONDOWN )
) I8 `- c0 G! o/ ^ {* f/ y% Q9 S$ V8 P5 m
POINT pt;
* P! _# @( k9 X' g" l2 K% k GetCursorPos(&pt);
# h2 E3 S; S! f# `8 [1 L SetForegroundWindow(hwnd);
, @# c8 W' j6 Q TrackPopupMenu(hPopMenu,TPM_RIGHTBUTTON,pt.x,pt.y,NULL,hwnd,NULL);4 F W* m: F* _5 @% S! l0 f
PostMessage(hwnd,WM_NULL,NULL,NULL);1 z% i9 Y6 J# {2 q' g* M5 I
}
2 \9 I y. A" x5 j2 F, @2 Y break;" V" |; [9 P! c3 z( W1 V7 F
case WM_DESTROY:1 ^. y. c# `% b
EndDialog(hwnd,0);
! r* v3 q' y" a return 1;: i- F8 w& Y2 D3 M% ]* I; g; C4 s C! W
break;8 }! [+ }" a) l% F# R7 D7 \
}
) q- A/ l! U6 H% ?5 R2 R* w- K return 0; q# C# ~/ t9 Z( z
}
3 r2 b+ A2 F3 W9 b! q c# ZLRESULT CALLBACK EditProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)! m! e8 F C1 ~7 x" ~1 t% A$ o
{
; k% r7 _& O- Q& M) `, w/ a switch(Msg)2 r* g3 w2 L4 @% y* {1 ~& I
{4 S2 i) k* ^- T- v% g. G8 j5 `
case WM_KEYDOWN:
0 H7 D6 N4 E5 Y8 e" T case WM_KEYUP:1 A2 c: k# F q2 t/ v" B. y
case WM_CHAR:
9 Q8 P) V# y7 \# }. v& A7 T/ l, E break;
/ f+ h( k( S, A9 s/ O9 A default:
6 Y; o) L. c3 k CallWindowProc(EditOldWndFunc,hWnd,Msg,wParam,lParam);* q, l0 A" ], o8 m& t8 y0 t" [
}6 a m1 o) M. `* T8 g( ?. `
' j( |. F' W- `' y
return 1;& j2 \3 H; Z& ~8 ~. o4 u- T }+ W1 o
}
! i9 b0 O8 I( o3 Z4 F N5 p! F. Pint RunNetClient(void)
$ W% q& N7 r& {" h3 H5 J1 i{
& |5 e+ C% J" h( T HKEY hkey;8 q0 r1 u! c. A: E. @& J
char szAppPath[256];
. p$ `# J6 ?7 S DWORD ButterSize = 256;
8 H0 D6 V# f; i8 }- R3 f$ l /*读取网通拨号程序的硬盘位置*/
$ l. I3 A9 T$ d! J+ {$ m/ h( b if (RegOpenKey(HKEY_LOCAL_MACHINE,szRegKeyName,&hkey) != ERROR_SUCCESS)
, G1 w) X+ F' H% V: o0 ]7 K2 U return 1;
8 R! ]3 T, ^4 ~- r' c7 n if (RegQueryValueEx(hkey,szRegChar,NULL,NULL,szAppPath,&ButterSize) != ERROR_SUCCESS)
- W+ t3 r0 b! n' i return 1;5 Y7 D( ~& a7 ]! y( |. `( p# S
RegCloseKey(hkey);8 b/ i Z( s! z( Z
if (ShellExecute(0,"open",szAppPath,NULL,NULL,SW_SHOWNORMAL) <= 32)* M: Z6 x3 N7 U: @" ^ m
return 2;! \& D6 s6 w/ X! v0 i
return 0;* `8 g$ w$ F$ R7 Z4 j; W
}
5 X' q* w- Q& E- I9 g& }& ~3 ^9 L, Z3 i
8 \( u9 e6 z/ V! H, f# C% t以上代码 |
|