c语言中,一个程序A怎么控制另一个程序B运行。

c语言中,一个程序A怎么控制另一个程序B运行。,第1张

这在C中很容易实现。

一、将A中的数据作为调用函数B的参数,经过B处理后,返回到A。假定A为主函数main(),B为排序函数Sort(int a[],int n),在A中给数组a[]赋值,通过函数B进行排序,完成后返回到A。

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define MAXlen 100

void Sort(int *x, int n) {     //选择排序

int i, j, min

int t

for (i = 0 i < n - 1 i++) {     // 要选择的次数:0~n-2共n-1次 

min = i                      // 假设当前下标为i的数最小,比较后再调整 

for (j = i + 1 j < n j++) { //循环找出最小的数的下标是哪个

if (*(x + j) < *(x + min)) {   

min = j              // 如果后面的数比前面的小,则记下它的下标

}

}  

if (min != i) {               // 如果min在循环中改变了,就需要交换数据

t = *(x + i)

*(x + i) = *(x + min)

*(x + min) = t

}

}

}

int main() {

int i

int iArr[MAXlen]

srand((unsigned int)time(NULL))

printf("\n排序前:\n")

for(i = 0  i < MAXlen  i++) {

iArr[i] = (unsigned int)rand() % 1000

if(i % 10 == 0) printf("%\n")

printf("%5d",iArr[i])

}

printf("\n")

Sort(iArr,MAXlen)

printf("\n排序后:\n")

for(i = 0  i < MAXlen  i++) {

if(i % 10 == 0) printf("%\n")

printf("%5d",iArr[i])

}

printf("\n\n")

return 0

}

PostMessage和sendmessage其实主要的用途还不在于传输信息,以sendmessage为例(PostMessage差不多的用途,只是有点细微的不同,有兴趣了解的话百度即可),两个可以作为信息的参数WPARAM和LPARAM其实分别是int和long,所以(LPARAM)(ch)没有任何意义。

有两个方法可行,一是用socket,但是有点太大动干戈了

另一种很简单的方法是剪贴板,迅雷有个功能是监视剪贴板,就是比如我写下一个链接,然后选中,复制的话迅雷就会d出下载。其实实现起来很简单,在mfc中有个OnTimer,在这里加入监控剪贴板代码的话就会一直监控。具体代码如下

新建一个工程,在默认对话框类中加入一个editbox,添加control变量c_show,然后在OnInitDialog中加入SetTimer(1,1,NULL)开始计时器

添加OnTimer消息,代码

void

CMy1Dlg::OnTimer(UINT_PTR

nIDEvent)

{

//

TODO:

在此添加消息处理程序代码和/或调用默认值

CString

s

HANDLE

hClip

if(OpenClipboard())

//打开剪贴板

{

hClip=GetClipboardData(CF_TEXT)//取出内存句柄

char

*buff

buff=(char

*)GlobalLock(hClip)//锁定内存,取出数据

s=buff//转换成CString

GlobalUnlock(hClip)//解锁

CloseClipboard()//关闭剪贴板

//这里要加入一定的判断条件了,迅雷只有监控到是链接才有反应,这里我们也可以加自己的条件,你的情况有两个,比如可以这样发现包含mystr:时就是第一种情况,第二种情况就是myip:

if(s.Find(_T("myip:"))>=0)

c_show.SetWindowTextW(s)//做出各种反应

}

CDialog::OnTimer(nIDEvent)

}

这就是接收程序了,发送程序比如作为按钮消息,按钮代码如下

CString

s

s=_T("myip:192.168.1.1")//要发送的消息,记得加上面说的特定的标志,两者要一致

HGLOBAL

hClip

if(OpenClipboard())

{

EmptyClipboard()

hClip=GlobalAlloc(GMEM_MOVEABLE,s.GetLength()+1)

char

*buff

buff=(char*)GlobalLock(hClip)

strcpy(buff,s)//如果你用了Unicode这里会报错,改成strcpy(buff,cs2ca(s))

cs2ca函数见最后

GlobalUnlock(hClip)

SetClipboardData(CF_TEXT,hClip)

CloseClipboard()

}

char

*

cs2ca(CString

str)

{

char

*ptr

#ifdef

_UNICODE

LONG

len

len

=

WideCharToMultiByte(CP_ACP,

0,

str,

-1,

NULL,

0,

NULL,

NULL)

ptr

=

new

char

[len+1]

memset(ptr,0,len

+

1)

WideCharToMultiByte(CP_ACP,

0,

str,

-1,

ptr,

len

+

1,

NULL,

NULL)

#else

ptr

=

new

char

[str.GetAllocLength()+1]

sprintf(ptr,_T("%s"),str)

#endif

return

ptr

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11656299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存