十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
很简单,取到程序句柄,之后找到想控制的控件,通过程序给他改值或控制就可以了
创新互联公司长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为海棠企业提供专业的成都网站设计、网站制作、外贸营销网站建设,海棠网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
正好我写个一个函数封装在DLL里了,代码是这样的:
''' summary
''' 检查进程是否运行
''' /summary
''' param name="ProcessName"要检查的进程名/param
''' returns/returns
''' remarks/remarks
Public Function CheckProcessByName(ByVal ProcessName As String) As Boolean
Dim MgmtClass As New ManagementClass("Win32_Process")
Dim rtnVal As Boolean = False
Dim mo As New ManagementObject()
For Each mo In MgmtClass.GetInstances()
If mo("Name").ToString().ToLower() = ProcessName.ToLower() Then
rtnVal = True
End If
Next
Return rtnVal
End Function
知道PID的话:
''' summary
''' 返回所有窗口句柄
''' /summary
''' returns/returns
''' remarks/remarks
Public Function ListAllProcessesHandle() As String
Dim sb As New StringBuilder()
Dim p As New Process()
For Each p In Process.GetProcesses(".")
Try
If p.MainWindowTitle.Length 0 Then
sb.Append("句柄:" + p.MainWindowHandle.ToString() + Environment.NewLine)
End If
Catch
End Try
Next
Return sb.ToString()
End Function
窗口隐藏进程总有吧,函数调用的参数是进程名,不是窗口名。
函数是自己写的没有调用API
PID不是关本程序的事的吧。
普遍上定义PID是指:
P:比例
I:积分
D:微分
PID一般只是工控控制器上才用得到的一种模糊控制方式,而PID只是三个数值而以,与API无关。
#include
#include
"global_varible.h"
/****************************************************************************
*
模块名:
pid
*
描述:
pid调节子程序
*
采用pid-pd算法。在偏差绝对值大于△e时,用pd算法,以改善动态品质。
*
当偏差绝对值小于△e时,用pid算法,提高稳定精度。
*
pidout=kp*e(t)+ki*[e(t)+e(t-1)+...+e(1)]+kd*[e(t)-e(t-1)]
*============================================================================
*
入口:
无
*
出口:
无
*
改变:
pid_t_run=加热时间控制
*****************************************************************************/
void
pid_math(void)
{
signed
long
ee1;
//偏差一阶
//signed
long
ee2;
//偏差二阶
signed
long
d_out;
//积分输出
if(!flag_pid_t_ok)
return;
flag_pid_t_ok=0;
temp_set=3700;
//温度控制设定值37.00度
pid_e0
=
temp_set-temp_now;
//本次偏差
ee1
=
pid_e0-pid_e1;
//计算一阶偏差
//ee2
=
pid_e0-2*pid_e1+pid_e2;
//计算二阶偏差
if(ee1
500)
//一阶偏差的限制范围
ee1
=
500;
if(ee1
-500)
ee1
=
-500;
pid_e_sum
+=
pid_e0;
//偏差之和
if(pid_e_sum
200)
//积分最多累计的温差
pid_e_sum
=
200;
if(pid_e_sum
-200)
pid_e_sum
=
-200;
pid_out
=
pid_kp*pid_e0+pid_kd*ee1;
//计算pid比例和微分输出
if(abs(pid_e0)
200)
//如果温度相差小于1.5度则计入pid积分输出
{
if(abs(pid_e0)
100)
//如果温度相差大于1度时积分累计限制
{
if(pid_e_sum
100)
pid_e_sum
=
100;
if(pid_e_sum
-100)
pid_e_sum
=
-100;
}
d_out
=
pid_ki*pid_e_sum;
//积分输出
if(pid_e0
-5)
//当前温度高于设定温度0.5度时积分累计限制
{
if(pid_e_sum
150)
pid_e_sum
=
150;
if(pid_e_sum
0)
//当前温度高于设定温度0.5度时削弱积分正输出
d_out
=
1;
}
pid_out
+=
d_out;
//pid比例,积分和微分输出
}
else
pid_e_sum=0;
pid_out/=100;
//恢复被pid_out系数放大的倍数
if(pid_out
200)
pid_out=200;
if(pid_out0)
pid_out=0;
if(pid_e0
300)
//当前温度比设定温度低3度则全速加热
pid_out=200;
if(pid_e0
-20)
//当前温度高于设定温度0.2度则关闭加热
pid_out=0;
hot_t_run=pid_out;
//加热时间控制输出
pid_e2
=
pid_e1;
//保存上次偏差
pid_e1
=
pid_e0;
//保存当前偏差
}
////////////////////////////////////////////////////////////void
pid_math()
end.
关于进程的问题你问了多次吧,为何不多看看Process
Dim p As Process() = Process.GetProcessesByName("qq")
If p.Count = 1 Then
Dim p1 As Process = p(0)
Dim m = p1.Modules '进程的所有模块。
End If
Dim p As Process = Process.GetProcessById(Pid)‘通过pid取进程。
AppActivate 可以根据窗口的标题来激活 也可以PID 枚举进程PID代码 百度下一堆 就不贴了
Dim MyAppID, ReturnValue
AppActivate "Microsoft Word" ' 激活 Microsoft
' Word。
' AppActivate 也可利用 Shell 函数的返回值。
MyAppID = Shell("C:\WORD\WINWORD.EXE", 1) ' 运行 Microsoft Word。
AppActivate MyAppID ' 激活 Microsoft
' Word。
' 您也可使用 Shell 函数的返回值。
ReturnValue = Shell("c:\EXCEL\EXCEL.EXE",1) ' 运行 Microsoft Excel。
AppActivate ReturnValue ' 激活 Microsoft
' Excel。