标题:
[原创]调用计算器并使它居中显示
[打印本页]
作者:
无条件为你
时间:
2006-11-18 13:12
标题:
[原创]调用计算器并使它居中显示
[watermark]文件压缩后只有613个字节。解压后2K。
下载地址:
作者:
x86
时间:
2006-11-18 14:37
标题:
[原创]调用计算器并使它居中显示
居中没有弄,获取桌面大小,然后设置StartUpInfo,CreateProcess
最终代码大小600字节
还是可以再压的...
作者:
无条件为你
时间:
2006-11-18 15:07
标题:
[原创]调用计算器并使它居中显示
居中是最主要的,不弄就没有意思了。主要是看居中的算法。公布源码:
.386
.Model Flat, StdCall
Option Casemap :None
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
.CODE
Main proc
local t:RECT,hInstance:DWORD,hCalc:DWORD,w:DWORD,h:DWORD
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke WinExec,CTXT("calc"),SW_MINIMIZE
invoke FindWindow,NULL,CTXT("计算器")
mov hCalc,eax
.if eax!=0
invoke GetWindowRect,hCalc,addr t
invoke GetSystemMetrics,SM_CXSCREEN
add eax,t.left
sub eax,t.right
shr eax,1
mov w,eax
invoke GetSystemMetrics,SM_CYSCREEN
add eax,t.top
sub eax,t.bottom
shr eax,1
mov h,eax
invoke SetWindowPos,hCalc,HWND_TOPMOST,w,h,0,0,SWP_NOSIZE
.endif
invoke ExitProcess,0
Main endp
END Main
居中是其一,还有设置窗口模态为总在最前端。
作者:
x86
时间:
2006-11-18 17:51
标题:
[原创]调用计算器并使它居中显示
我以为楼主是比大小呢,原来是看算法的,呵呵
那好,就弄个居中的,再来个窗口总在最前端^_^
未压缩时952字节
PS:没想到楼主汇编也玩得头头是道哦
作者:
无条件为你
时间:
2006-11-18 18:00
标题:
[原创]调用计算器并使它居中显示
简单处理一下,还可减少,手工进行处理,可减少更多,不过意义不大。
初次练笔,源码已经公布,谁都可以去处理,没什么了。。。
作者:
x86
时间:
2006-11-18 18:30
标题:
[原创]调用计算器并使它居中显示
有个问题请教下,你的汇编代码这里
mov hInstance,eax
是什么用途呀,虽然偶不怎么会汇编,但是这里实在没看出什么意思,因为后面好象一直没有提到这个hInstance啊.
作者:
默数悲伤
时间:
2006-11-19 16:57
标题:
[原创]调用计算器并使它居中显示
c的:
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hinstExe, HINSTANCE, PSTR pszCmdLine, int nCmdShow)
{
char cmdLine[] = "calc.exe";
STARTUPINFO si = {sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi = {0};
if(!CreateProcess(NULL, cmdLine, NULL, NULL, false, 0, NULL, NULL, &si, &pi))
return -1;
Sleep(300);
RECT rc = {sizeof(RECT)};
HWND hwnd = FindWindow(NULL, "计算器");
if(NULL == hwnd)
return -1;
if(!GetWindowRect(hwnd, &rc))
return -1;
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
cx = (cx - rc.right + rc.left) / 2;
cy = (cy - rc.bottom + rc.top) / 2;
si.dwX = cx;
si.dwY = cy;
si.dwXSize = rc.right - rc.left;
si.dwYSize = rc.bottom - rc.top;
SetWindowPos(hwnd, HWND_TOPMOST, si.dwX, si.dwY, si.dwXSize, si.dwYSize, SWP_SHOWWINDOW);
return 0;
}
复制代码
.386
.model flat, stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data?
rect RECT <>
hwnd HWND ?
showx dword ?
showy dword ?
xsize dword ?
ysize dword ?
.data
szName byte ';calc';, 0
szApp byte ';计算器';, 0
.code
start:
invoke WinExec, offset szName, 0
invoke FindWindow, NULL, offset szApp
MOV [hwnd], EAX
invoke GetWindowRect, EAX, offset rect
invoke GetSystemMetrics, SM_CXSCREEN
SUB EAX, rect.right
ADD EAX, rect.left
SAR EAX, 1
MOV [showx], EAX
invoke GetSystemMetrics, SM_CYSCREEN
SUB EAX, rect.bottom
ADD EAX, rect.top
SAR EAX, 1
MOV [showy], EAX
MOV EAX, rect.right
SUB EAX, rect.left
MOV [xsize], EAX
MOV EAX, rect.bottom
SUB EAX, rect.top
MOV [ysize], EAX
invoke SetWindowPos, hwnd, HWND_TOPMOST, showx, showy, xsize, ysize, SWP_SHOWWINDOW
ret
end start
复制代码
作者:
无条件为你
时间:
2006-11-19 17:43
标题:
[原创]调用计算器并使它居中显示
用C++实现代码很短。我在C++源码中用的是GetSystemMetrics(0)获取桌面,其实还可以用到EnumDisplaySettings来获取,不过后者稍麻烦。
居中的算法应该不唯一,希望你能写出与我不同的算法。
回X86的问题:那里确实没有什么意思,省略即可。
作者:
无条件为你
时间:
2006-11-21 07:25
标题:
[原创]调用计算器并使它居中显示
例如还有一种算法:
由屏幕长和宽两条直角边,利用勾股定理求出斜边长度,然后同理可获取计算器窗口的斜边(对角线长度),然后让这两条斜边对齐,做直线运动,当计算器斜边到达屏幕斜边中点的时候,停止运动。换话话来说:就是让计算器窗口从屏幕左上角向屏幕右下角滑动,当滑到中间的时候停止。实现起来应该比上述方面麻烦的多,但乐趣不同!
由于计算机CPU指定非常快,所以可能看不到滑动效果就直接居中了,这时如果想看到滑动轨迹,在每次改变窗口位置的地方加Sleep(100)即可。
因为意义不大,我也赖得再写出源码,编程思想就这样,大家理解就行。
欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/)
Powered by Discuz! 7.2