Advertisement
6_2008-2009 Security #199869

Secure Hash Algorithm (SHA-1)

The function generates a 160-bit (40-hex-digits representing 20 bytes) message digest for a given message (String) of any length. The digest is unique to the message. It is not possible to recover the message from the digest. The only way to find the source message for a digest is by the brute force hashing of all possible messages and comparison of their digests.

AI

AI 摘要: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.

源代码
original-source
Upload
I have supplied you with some sample code, I will just explain what I did and why I did it so you can understand what is going on :-)<br>
I swipped this code from my CD Player, so for those of you who might recognize this, that's where it came from.<br>
first let's create the Icon Variable<br>
NOTIFYICONDATA	nid;<br>
void CreateTrayIcon(HWND hWnd, HINSTANCE hInst)<br>
{<br>
First we set the size of the TrayIcon variable:<br>
	nid.cbSize = sizeof(nid);<br>
I initialized the main Icon here<br>
	TrayIcon =	(HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_TRAY),	IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);<br>
Now I set the main Icon into the Tray Icon, you will see soon how to change this with out resetting the Icon.<br>
	nid.hIcon = TrayIcon;<br>
Here I gave the Icon something to 'report to' all the user inputs...<br>
	nid.hWnd = hWnd;<br>
Mouse over tip text, you will see how to change this also.<br>
	strcpy(nid.szTip, "CD Player");<br>
Now I set the Callback Message, I will explain this later in the code.<br>
	nid.uCallbackMessage = WM_TRAYICON;<br>
Here I told the Tray Icon what I wanted it to do, I have it making the Icon and the Tip, aswell as having the Tray notice it has been assigned a Callback Message<br>
	nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;<br>
Give the Tray Icon the main Windows Instance<br>
	nid.uID = (UINT)hInst;<br>
This just created the Icon:<br>
	Shell_NotifyIcon(NIM_ADD, &nid);<br>
}<br>
void ShowTrayIcon(void)<br>
{<br>
You might be thinking: 'Why did I add the Icon again?', but when I hide the icon I deleted it from the tray...<br>
	Shell_NotifyIcon(NIM_ADD, &nid);<br>
}<br>
void HideTrayIcon(void)<br>
{<br>
...as you can see here.<br>
	Shell_NotifyIcon(NIM_DELETE, &nid);<br>
}<br>
void SetTrayIconIcon(HICON icon)<br>
{<br>
To change the Icon, just make icon equal to the icon in which you wish it to be<br>
	nid.hIcon = icon;<br>
	Shell_NotifyIcon(NIM_MODIFY, &nid);<br>
}<br>
void SetTrayIconCaption(char *msg)<br>
{<br>
Same here, just set msg to the message you want to be displayed on mouse over of the Tray Icon<br>
	strcpy(nid.szTip, msg);<br>
	Shell_NotifyIcon(NIM_MODIFY, &nid);<br>
}<br>
To clean up the icon when the program is shutting down...<br>
void KillTrayIcon(void)<br>
{<br>
...first we delete the Icon from the tray...<br>
	Shell_NotifyIcon(NIM_DELETE, &nid);<br>
...then we destroy the main Icon...<br>
	DestroyIcon(TrayIcon);<br>
...and reset the Tray Icon variable back to nothing.<br>
	memset(&nid, 0, sizeof(nid));<br>
}<br>
now we can 'handle' all input from the Icon and show a menu when it's right or left clicked on:<br>
this is where the Callback Message comes into play... whenever the icon is clicked on, whether it be left or right click, WM_TRAYICON is sent to the window procedure for processing<br>
case WM_TRAYICON:<br>
{<br>
to catch any clicks you make a switch/case loop using the LPARAM parameter of the windows procedure<br>
	switch(lParam)<br>
	{<br>
then you can have it check to see if it was a right button or a left button that was clicked.<br>
		case WM_RBUTTONDOWN:<br>
here I just have it getting the cursor position and displaying a menu where ever the right mouse button was pressed<br>
			POINT pp;<br>
			GetCursorPos(&pp);<br>
this just keeps in a respectable place on the screen...<br>
			if (pp.x < (long) (GetSystemMetrics(SM_CXSCREEN) - 100))<br>
						pp.x = (long) (GetSystemMetrics(SM_CXSCREEN) - 100);<br>
			if (pp.y < (long) (GetSystemMetrics(SM_CYSCREEN) - 100))<br>
						pp.y = (long) (GetSystemMetrics(SM_CYSCREEN) - 100);<br>
									SetForegroundWindow(hWnd);<br>
									TrackPopupMenu(hPopup, TPM_RIGHTBUTTON, pp.x, pp.y, 0, hWnd, NULL);<br>
			break;<br>
for the left button I have it showing the window if I had it minimized:<br>
		case WM_LBUTTONDOWN:<br>
			if(Minimized)<br>
			{<br>
			ShowWindow(hWnd, SW_SHOW);<br>
			}<br>
	}<br>
	break;<br>
}<br>
to process any menu commands, just process that the way you would with a normal window menu.<br>
That pretty much covers it! if you hve any further questions about <b>ANY</b> of my tutorials <a href="mailto:dragoon_xxx@hotmail.com">E-Mail me</a>, and I will answer your questions as best as I can.
Upload
原始评论 (3)
从 Wayback Machine 恢复