该用户从未签到
|
4楼
楼主 |
发表于 2004-10-30 16:50:00
|
只看该作者
#include $ I4 }/ r3 }3 o' g, |' [
#include "resource.h"3 C! v& w3 `- p, {
#define APPNAME "AutoDial"
, }3 y' ?. s) k* r#define WM_MyIcon WM_USER + 1007 W6 N, K* [$ W R8 f
const char szRegKeyName[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Components\\51AF6AC6C47EC36459D07877B938F76E";
. ~4 }0 Q( ] o* Bconst char szRegChar[] = "A0CDAE5BF3ECD0F439C33E627F3DA3E5";7 D7 _, I& Y6 `( ^9 T- Q
const char szHzcncClassName[] = "TfrmMainNetClient";9 ^; r5 Z7 \ s; z) a6 N4 F
const char szClassName[ ] = "AutoDialForm";
5 g# V& v' T) ^HWND hNetClient,hConnectButton;
8 T- {4 U, a: ^8 E7 N; jHICON hIcon;3 M0 E" A' e- v y. P$ P6 i
HMENU hPopMenu;
5 E. ?! t H6 f, jLRESULT CALLBACK WindowProc (HWND, UINT, WPARAM, LPARAM);
! X) Z0 L, a; W) c7 ULRESULT CALLBACK EditProc(HWND hWnd,
* J' r, f7 q' X: Z UINT Msg,
) u7 J- h$ l8 o9 j% P0 b WPARAM wParam,
' ]7 f+ r9 D- Q1 E LPARAM lParam. ^8 `% C5 `: r5 D) Y
);
4 M" P$ U* e6 V# `7 ?& _! dint RunNetClient(void);+ c8 z% r* R; I1 f; t. r
NOTIFYICONDATA MyIcon;' F$ v9 ?* e. D1 L& S" y) w
WNDPROC EditOldWndFunc;
7 Y$ N4 G, r/ {# i, s: w zint WINAPI WinMain (HINSTANCE hThisInstance,
1 P2 m4 F% W3 o+ k* x( F HINSTANCE hPrevInstance,& g2 r* N' w+ v- F
LPSTR lpszArgument,7 N. E5 f# z H3 q
int nFunsterStil)6 H6 r- x% {4 U& Z6 Y
{
3 m. ?; `9 W- \; d hIcon = LoadIcon(hThisInstance,MAKEINTRESOURCE(IDI_ICON));
8 n5 x8 V" p) I- Y hPopMenu = GetSubMenu(LoadMenu(hThisInstance,MAKEINTRESOURCE(IDR_MENU1)),0);! v. F! p- P5 R" x4 q% K- {) o
DialogBox(hThisInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, (DLGPROC)WindowProc);# J" }) H' H" q& c! `1 i
return 0;# s- L3 p% l; y3 ]. O
}
$ }, l6 i$ Q) U; x- ?( x( z' Y TLRESULT CALLBACK WindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam). S8 w3 H6 G+ \& a: S( I% G$ b
{8 G9 ?: ^3 `, t7 [% `
static UINT times = 0;4 e v; p/ H% c+ u' v2 M
switch (message) /* handle the messages */( M4 b& t3 L, g- G1 S% Q+ a2 T
{
9 ^. p4 k" k! T1 d$ N: C case WM_INITDIALOG:
1 _" L( O5 o3 n- s hNetClient = FindWindow(szHzcncClassName,NULL);/ @) o, W$ C2 g0 Q
if(!hNetClient)
* h# r% U/ r% K- |( _) W& m$ F0 H% V {% H4 y. H) O7 g7 I( t3 Y' C( u
switch(RunNetClient())$ k) R0 ?$ R' T: g, A
{
2 E% J' a" G& D case 0 :, [- [; J' t t% R* C( Q+ R
break;& Q$ b) b1 y+ T0 f* D. r) O4 Z
case 1 :
! E. |3 k. f% b5 z! |6 O; I MessageBox(hwnd,"请确定是否正确安装网通拨号软件!",APPNAME,MB_OK);
0 I% F$ J" c9 Q _+ x break;
# a( W- a6 ?& I x case 2 :7 G# M6 x8 U' n, a6 P/ ^& B
MessageBox(hwnd,"无法运行拨号软件!",APPNAME,MB_OK);
. X# `- b4 q0 y( u4 |" _2 c }( Z# U% U5 z( h3 [
hNetClient = FindWindow(szHzcncClassName,NULL);
' M9 o# h9 z, c2 G, { }
7 ]. @8 A& ?) T) V hConnectButton = FindWindowEx(hNetClient,NULL,NULL,"连接");
* e: |2 D5 q* r6 C, D" { SendMessage(hwnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon);
/ `5 q& p: K# q# w MyIcon.cbSize = sizeof(NOTIFYICONDATA);* X9 h6 g- e; a0 X3 [7 A+ L
MyIcon.hWnd = hwnd;
7 Y5 n: \- i+ ~/ F/ `. E B* u, I: W" ~ MyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
5 M: r3 a, Z9 K( q MyIcon.uID = 1;
4 K" f; y! n2 o MyIcon.hIcon =hIcon;
3 N8 R2 Q) D# Q. L MyIcon.uCallbackMessage = WM_MyIcon;. {; y- l# C4 t$ l- [/ L
lstrcpy(MyIcon.szTip,"自动拨号");
i" G1 k( x- H w0 y% B SetDlgItemInt(hwnd,IDC_EDIT1,1,0);% g$ e( }' c* s8 C4 ~6 g
SetDlgItemInt(hwnd,IDC_EDIT2,0,0);
# L/ d/ a1 P R8 z; S& i SetDlgItemText(hwnd,IDC_EDIT3,"11:29:00");
: U, }0 d" [; @2 Z% e! P2 r+ y EditOldWndFunc = (WNDPROC)SetWindowLong(GetDlgItem(hwnd,IDC_EDIT3),GWL_WNDPROC,EditProc);
% v. V& E0 ^' v& s% m% h5 ]9 G' t return 1;6 U X% ?+ ?' u# ~. ^
break;8 P9 [4 P$ r6 C6 \& `
case WM_TIMER:& n0 I* [0 H2 ^8 \( o: w4 m
hNetClient = FindWindow(szHzcncClassName,NULL);/ R$ i: o0 ]2 P- s2 `
if (!hNetClient)
' P9 d v$ l5 M0 A' N. {/ V) A$ o {+ m# ?! d9 K" q. v# @, @' ~5 ?- M: r5 O
KillTimer(hwnd,0);
6 q/ u! e2 t/ q% h; v9 U break;7 h( u! i/ u7 P0 a# z% Q
}* k; R5 d5 F5 C: p3 c
if(IsWindowEnabled(hConnectButton))
" d. U/ s! l3 l# J8 `$ K {
4 M } R. [: U: H2 ~8 E if(times < GetDlgItemInt(hwnd,IDC_EDIT2,NULL,0) || GetDlgItemInt(hwnd,IDC_EDIT2,NULL,0) == 0)
8 M/ o* O/ R9 e3 ~7 z: y4 b4 l* N {
* B1 f$ A8 O0 y1 ?% E SendMessage(hConnectButton,BM_CLICK,0,0);( X7 O+ r, ]4 m
times++;, B9 e2 R/ n& x. Y
}0 j/ V% |2 a7 y/ P0 m
h, Q4 n Q5 g9 x1 @
}9 c: D7 V) g P6 Y
break;
2 m! @9 Z; x- V) g, }+ V- w case WM_COMMAND:
) U- L& u# Y, W) [ 0 c$ R: q6 _. L( g( l. J! t
switch( LOWORD(wParam) )
& H2 B) t1 Z6 F; x- M+ g5 a {2 r9 ]- S' c0 b
6 Q+ J5 [ Z& J1 ^% ` s2 [# ^, B( ~ case IDOK:
3 t5 ^, D4 e8 _' R) U( I SetTimer(hwnd,0,1000 * GetDlgItemInt(hwnd,IDC_EDIT1,NULL,0),NULL);/ J# z0 N. w+ o5 P4 @+ q8 b
ShowWindow(hwnd,SW_HIDE);
8 m) G0 U' k- X6 e5 T Shell_NotifyIcon(NIM_ADD,&MyIcon);5 o W1 v2 A% o; I x+ Y' a
times = 0;) k) ~) b+ K& r \# Y! H& q. P/ m
break;/ k) t& n! ]7 F
case IDM_SETTING:
3 R; q H1 x }! g1 P0 e' ` ShowWindow(hwnd,SW_NORMAL);
) M3 Z) {8 Y9 i* M Shell_NotifyIcon(NIM_DELETE,&MyIcon);
$ y3 l9 p) e6 P. ~' B E9 R. k: u KillTimer(hwnd,0);: w; C7 b0 o- j$ j3 S. a4 l
break;
/ W: h% B. z1 M case IDCANCEL:
5 t0 J. `" h4 `2 S" R u& N case IDM_EXIT:( m9 x5 Y5 j& C0 i3 |
Shell_NotifyIcon(NIM_DELETE,&MyIcon);+ @ O8 o3 i; r6 c: W! @
KillTimer(hwnd,0);+ d5 A8 k1 m( e! ~- W- q
EndDialog( hwnd, 0 );- t* o% R( v6 b; f+ I, c6 c. D8 ~, N' `
return TRUE;
h$ s2 }2 D9 m$ v' Q. s3 i) D }
4 j/ d' ^2 j# ^7 v. ?9 K6 F return 1;
# }! T d7 F' ` `' O- Y. Y9 d case WM_MyIcon:1 x+ p) G0 {- A6 O4 A" e7 P4 ]1 ?
if(lParam == WM_RBUTTONDOWN )
8 t8 F7 }( ? [ {1 S3 _1 i1 z' c# E4 _
POINT pt;
; ~6 {9 z9 m' C+ n$ ^; h GetCursorPos(&pt);
, E2 D p3 j! g' E8 w: s SetForegroundWindow(hwnd);+ `( ~/ ?+ D8 t7 J. F. Y
TrackPopupMenu(hPopMenu,TPM_RIGHTBUTTON,pt.x,pt.y,NULL,hwnd,NULL);0 L7 Q# U4 J7 Y) Z; [
PostMessage(hwnd,WM_NULL,NULL,NULL);! p" U$ L' V" m# C% K
}
8 B5 q* e1 c5 `' [ ~4 v break;, z9 E" c& g# h6 i: C7 v8 M* h
case WM_DESTROY:2 B D+ Y2 p ^8 g) }. u
EndDialog(hwnd,0);# D3 n: a" V: K; D
return 1;( w1 h* |4 E- Y4 H
break;
/ b$ l \. D2 R9 E7 u! ^" G }
: j+ Y* o" l% u) o+ \ return 0;$ F: k o4 |6 c5 r0 q
}
* {9 e; [2 x/ P4 ~" _LRESULT CALLBACK EditProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)8 g* Q N3 Q0 j( k4 ~
{
$ E: {3 W# l' T switch(Msg)6 w+ ~* P% i1 E
{! r5 P1 @: r. L
case WM_KEYDOWN:7 ?* V( n! P" Y( q' v! g$ e P B H
case WM_KEYUP:4 y! t- W, }. ^0 g2 G8 W
case WM_CHAR:
/ \, c. O+ n0 a T. V( [+ N5 i break;
+ e! u8 H: A1 L! K default:2 L8 Z' `$ b9 n' D4 ]: n6 `2 o
CallWindowProc(EditOldWndFunc,hWnd,Msg,wParam,lParam);9 Y5 J/ l" K, f, Y: w
}
4 P4 n) E! g6 d: J
3 a* e- P) f" a/ y; B return 1;
$ e8 a& e& I# K% w0 d( h9 ] N}, ~" E% x$ K, K, g5 G
int RunNetClient(void). y4 l: l" ~* r
{
. G# a( ?9 y4 ~* a1 O H HKEY hkey;# B- v! s, Y7 w( D ?
char szAppPath[256];
9 ]- S6 T) t- n- e. s9 V" s DWORD ButterSize = 256;3 y. ? l& r; L; h4 T$ ]
/*读取网通拨号程序的硬盘位置*/
( q9 [ b" n) a- s Y. s if (RegOpenKey(HKEY_LOCAL_MACHINE,szRegKeyName,&hkey) != ERROR_SUCCESS)
. K+ x; L+ d% o$ U$ \! F6 B( p+ b4 B return 1;6 H$ I8 e8 E( R- J6 \; ^% |- G& M
if (RegQueryValueEx(hkey,szRegChar,NULL,NULL,szAppPath,&ButterSize) != ERROR_SUCCESS)
) t% e# [& B& [* S/ A$ ?5 l return 1;' {* B) I2 K4 k4 i3 E
RegCloseKey(hkey);
4 P9 H e* n2 U0 I" Q if (ShellExecute(0,"open",szAppPath,NULL,NULL,SW_SHOWNORMAL) <= 32)
: A' U- J* b0 _( \4 I) k% n+ s return 2;
1 g0 m p8 _3 q return 0;
9 E: `3 E4 o& Z" t) x}
; d; |3 U' V4 X, V( l) N' m1 `1 I d& C
以上代码 |
|