icqsend.c
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 495 行
C
495 行
/*__________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: ICQsend.c,v 1.17 2002/08/06 20:09:42 dallen Exp $
__________________________________________________________________________*/
#include "precomp.h"
// All this just because of ICQ's stupid control-return hotkey...
LRESULT CALLBACK
GetMsgHookProc (
INT iCode,
WPARAM wParam,
LPARAM lParam)
{
MSG *s=(MSG *) lParam;
switch(s->message)
{
case WM_CHAR:
case WM_KEYDOWN:
case WM_KEYUP:
{
if(s->wParam==VK_RETURN)
{
if (GetAsyncKeyState(VK_CONTROL)<0)
{
HWND hwndEdit,hwndTest;
hwndTest=s->hwnd;
while(hwndTest!=NULL)
{
hwndEdit=hwndTest;
hwndTest=GetParent(hwndEdit);
}
if((hwndEdit!=NULL)&&(s->message==WM_KEYUP))
{
PPLUGININFO plugin;
WNDPROC lpOldProc;
lpOldProc = (WNDPROC)GetProp( hwndEdit, "oldproc" );
if(lpOldProc!=NULL)
{
// This must be a PGP subclassed window
plugin=GetPluginInfo(hwndEdit);
if(plugin!=NULL)
PostMessage(plugin->hwndMain,WM_COMMAND,(WPARAM)plugin->SendID,(LPARAM)0);
}
}
s->wParam=' ';
}
}
break;
}
}
return 0;
}
void InitGetMessageHook(HHOOK* phhookGetMessage)
{
DWORD dwPhraseThreadID;
dwPhraseThreadID = GetCurrentThreadId ();
*phhookGetMessage = SetWindowsHookEx (WH_GETMESSAGE ,
GetMsgHookProc,
NULL, dwPhraseThreadID);
}
void UninitGetMessageHook(HHOOK hhookGetMessage)
{
UnhookWindowsHookEx (hhookGetMessage);
}
LRESULT CALLBACK SendMessageWndProc(HWND hDlg,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
WNDPROC lpOldProc;
PPLUGININFO Plugin;
lpOldProc = (WNDPROC)GetProp( hDlg, "oldproc" );
Plugin=GetPluginInfo(hDlg);
if(Plugin->bInitDone)
{
char szUserID[256];
BOOL bEncrypt;
// WM_CREATE has finished making the window
// All text fields should be filled in. Get the
// ICQ number and depress the toolbar button.
Plugin->bInitDone=FALSE;
GetWindowText(Plugin->hwndICQ,Plugin->szICQ,256);
if(UserHasState(g_userstate,
Plugin->szICQ,
&bEncrypt))
{
if(bEncrypt)
{
Plugin->bEncrypt=TRUE;
SendMessage(Plugin->hwndToolbar,TB_SETSTATE,
(WPARAM)IDC_ENCRYPT,
(LPARAM)MAKELONG(TBSTATE_CHECKED|TBSTATE_ENABLED, 0));
}
}
else
{
sprintf(szUserID,"<ICQ:%s>",Plugin->szICQ);
// MessageBox(Plugin->hwndCurrent,
// szUserID,"ICQ check",MB_OK|MB_SETFOREGROUND);
if(CheckForICQMatch(Plugin->hwndCurrent,PGPsc,PGPtls,szUserID))
{
if(CheckForICQUserID(Plugin->hwndCurrent,PGPsc,PGPtls))
{
Plugin->bEncrypt=TRUE;
SendMessage(Plugin->hwndToolbar,TB_SETSTATE,
(WPARAM)IDC_ENCRYPT,
(LPARAM)MAKELONG(TBSTATE_CHECKED|TBSTATE_ENABLED, 0));
}
}
}
}
switch(msg)
{
case WM_SHOWWINDOW:
{
Plugin->bInitDone=TRUE;
break;
}
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDC_PGPKEYS: // send key
{
BOOL bOK;
bOK=FALSE;
if(CheckForICQUserID(Plugin->hwndCurrent,PGPsc,PGPtls))
{
bOK=TRUE;
}
else
{
if(ICQWizard(Plugin->hwndCurrent,PGPsc,PGPtls))
{
bOK=TRUE;
}
}
if(bOK)
{
void *pOutput;
pOutput=ExportICQUserID(hDlg,PGPsc,PGPtls);
if(pOutput==NULL)
{
return 0;
}
else
{
SetWindowText(Plugin->hwndRichEdit,pOutput);
memset(pOutput,0x00,strlen(pOutput));
PGPFreeData(pOutput);
pOutput=NULL;
// Fake send
wParam=Plugin->SendID;
// Reset the encrypt button in case ICQ
// doesn't actually send it
SendMessage(Plugin->hwndToolbar,TB_SETSTATE,
(WPARAM)IDC_ENCRYPT,
(LPARAM)MAKELONG(TBSTATE_ENABLED, 0));
Plugin->bEncrypt=FALSE;
}
break;
}
}
}
if(LOWORD(wParam)==Plugin->SendID)
{
/*
if(Plugin->bSendKey)
{
void *pOutput;
pOutput=ExportICQUserID(hDlg,PGPsc,PGPtls);
if(pOutput==NULL)
{
return 0;
}
else
{
SetWindowText(Plugin->hwndRichEdit,pOutput);
memset(pOutput,0x00,strlen(pOutput));
PGPFreeData(pOutput);
pOutput=NULL;
}
}
else */
if(Plugin->bEncrypt)
{
if(!EncryptRichEdit(Plugin))
return 0;
// Reset the encrypt button in case ICQ
// doesn't actually send it (& disable)
SendMessage(Plugin->hwndToolbar,TB_SETSTATE,
(WPARAM)IDC_ENCRYPT,
(LPARAM)MAKELONG(0,0)); //TBSTATE_ENABLED, 0));
Plugin->bEncrypt=FALSE;
}
break;
}
break;
}
case WM_GETMINMAXINFO:
{
LPMINMAXINFO lpmmi;
// Let ICQ set it first
CallWindowProc(lpOldProc, hDlg, msg, wParam, lParam);
lpmmi = (LPMINMAXINFO) lParam;
// Lets see if we need to adjust it
if(lpmmi->ptMinTrackSize.x<480)
{
lpmmi->ptMinTrackSize.x=480;
}
return 0;
}
case WM_SIZING:
{
PPLUGININFO plugin;
plugin=GetPluginInfo(hDlg);
if(plugin->b2001b)
{
RECT *lprc = (LPRECT) lParam;
if(lprc->right-lprc->left<530)
{
lprc->right=lprc->left+530;
}
return TRUE;
}
}
case WM_SIZE:
{
PPLUGININFO plugin;
CallWindowProc(lpOldProc, hDlg, msg, wParam, lParam);
plugin=GetPluginInfo(hDlg);
SizeToolbar(plugin);
SizeSendKey(plugin);
return 0;
}
case WM_NEXTDLGCTL:
{
SetFocus(Plugin->hwndSend);
return 0;
}
case WM_DESTROY:
{
PPLUGININFO plugin;
plugin=GetPluginInfo(hDlg);
UninitGetMessageHook(plugin->hMsgHook);
FreePluginInfo(plugin);
RemoveProp(hDlg, "oldproc");
SetWindowLong(hDlg, GWL_WNDPROC, (DWORD) lpOldProc);
break;
}
}
return CallWindowProc(lpOldProc, hDlg, msg, wParam, lParam);
}
BOOL IsSendMessageWindow(HWND hwndRichEdit,
HWND *phwndMain,
HWND *phwndICQ,
HWND *phwndNick,
HWND *phwndSend,
HWND *phwndSKMark,
HWND *phwndTool,
HWND *phwndBack,
BOOL *b2001b)
{
HWND hwndICQText;
HWND hwndNickText;
*b2001b=FALSE;
*phwndMain=GetParent(hwndRichEdit);
hwndNickText=FindWindowEx(*phwndMain,NULL,"Static","Nick:");
if(hwndNickText==NULL)
{
return FALSE;
}
*phwndNick=FindWindowEx(*phwndMain,hwndNickText,"Static",NULL);
if(*phwndNick==NULL)
{
return FALSE;
}
hwndICQText=FindWindowEx(*phwndMain,NULL,"Static","ICQ# :");
if(hwndICQText==NULL)
{
return FALSE;
}
*phwndICQ=FindWindowEx(*phwndMain,hwndICQText,"Static",NULL);
if(*phwndICQ==NULL)
{
return FALSE;
}
*phwndSend=FindWindowEx(*phwndMain,NULL,"Button","&Send");
*phwndSKMark=FindWindowEx(*phwndMain,NULL,"Button","Msg Mode");
if(*phwndSKMark==NULL)
{
*phwndSKMark=*phwndSend;
}
if(*phwndSend==NULL)
{
return FALSE;
}
*phwndTool=FindWindowEx(*phwndMain,NULL,"#32770",NULL);
if(*phwndTool==NULL)
{
return FALSE;
}
*phwndBack=GetDlgItem(*phwndTool,6544);
if(*phwndBack==NULL)
{
*phwndBack=FindWindowEx(*phwndTool,NULL,"ToolbarWindow32",NULL);
if(*phwndBack==NULL)
{
return FALSE;
}
else
{
*phwndSKMark=FindWindowEx(*phwndMain,NULL,"Button","Send by:");
if(*phwndSKMark==NULL)
{
*phwndSKMark=*phwndSend;
}
*b2001b=TRUE;
}
}
return TRUE;
}
BOOL IsSendMessageWindow2000a(HWND hwndRichEdit,
HWND *phwndMain,
HWND *phwndICQ,
HWND *phwndNick,
HWND *phwndSend,
HWND *phwndSKMark,
HWND *phwndTool,
HWND *phwndBack)
{
HWND hwndICQText;
HWND hwndNickText;
HWND hwnd32770;
// HWND hwndFirstRE;
*phwndMain=GetParent(hwndRichEdit);
/*
// 2000a has multiple richedits which could clash.
// Only one seems to do anything? -wjb
hwndFirstRE=FindWindowEx(*phwndMain,NULL,"RICHEDIT",NULL);
if(hwndFirstRE!=hwndRichEdit)
{
return FALSE;
}*/
hwnd32770=FindWindowEx(*phwndMain,NULL,"#32770",NULL);
if(hwnd32770==NULL)
{
return FALSE;
}
// 32770 Stuff
hwndNickText=FindWindowEx(hwnd32770,NULL,"Static","Nick:");
if(hwndNickText==NULL)
{
return FALSE;
}
*phwndNick=FindWindowEx(hwnd32770,hwndNickText,"Static",NULL);
if(*phwndNick==NULL)
{
return FALSE;
}
hwndICQText=FindWindowEx(hwnd32770,NULL,"Static","To: ICQ# ");
if(hwndICQText==NULL)
{
return FALSE;
}
*phwndICQ=FindWindowEx(hwnd32770,hwndICQText,"Static",NULL);
if(*phwndICQ==NULL)
{
return FALSE;
}
// End 32770 Stuff
*phwndSend=FindWindowEx(*phwndMain,NULL,"Button","&Send");
*phwndSKMark=FindWindowEx(*phwndMain,NULL,"Button","Msg Mode");
if(*phwndSend==NULL)
{
return FALSE;
}
*phwndTool=hwnd32770;
*phwndBack=GetDlgItem(*phwndTool,6544);
if(*phwndBack==NULL)
{
return FALSE;
}
return TRUE;
}
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?