<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我正在嘗試編寫一個腳本來正確計算自訂設計器和設計評估器中分離式設計的功率。問題是沒有使用正確的自由度,雖然現在可以更改它們,但每次更改自由度或信噪比時,功率分析的輪廓框都會崩潰,並且有很多不必要的按鈕點擊在。另外,我無法確定如何計算分離式設計的非中心性參數,因此我不能只編寫腳本從頭開始進行數學計算。在 JMP 10 中,非中心參數是功效分析中的隱藏列,我可以將其作為矩陣獲取。
我想要做的是編寫一個用戶可以在自訂設計器或設計評估器中運行的腳本,並讓它同時使用多個信噪比來計算它們的功率。為此,我的腳本需要能夠更改 JMP 平台中的信噪比,並讓 CD 或 DE 重新計算 NCP。
我可以更改 NumberColEditBox 值,但無法讓平台重新計算 NCP。
win = Window("DOE - 客製化設計"); //連接到視窗以進行測試
win[OutlineBox(15)] << 關閉(0); //這是功率分析輪廓框
win[NumberColBox(9)] << 隱藏(0); //這是NCP列
ncp1 = win[NumberColBox(9)] << 取得為矩陣; //保存NCP列
win[NumberColEditBox(4)] << SetValues([4]); //這會將框中的訊號雜訊比值變更為 4
如何模擬回車鍵讓平台重新計算?
我會注意到,當我從腳本更改框中的值並只需單擊該框並按 Enter 鍵時,什麼也沒有發生。當我輸入剛剛更改的數字並按 Enter 鍵時,什麼都沒有發生。如果我輸入任何其他數字,它就會正常工作。(此序列類似, win[NumberColEditBox(4)] << SetValues([4]); 按Enter 鍵,無任何內容-> 在方塊中鍵入4,按Enter 鍵,無任何內容-> 在方塊中鍵入3,按Enter 鍵,作品)
一些帶有按鍵功能的範例 - Windoze keybd_event 函數與 VK_RETURN
希望這可以幫助。
最好的,
-馬特
// keypress_example.jsl
// 馬特弗林 -
// 嘗試按鍵時要小心 - 可能會變得有趣
// http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx
// http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx
// http://msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx
// http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx
// http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx
VK_ESCAPE = 十六進位轉數字( "0000001B" );
VK_H = 十六進位轉數字( "00000048" );
VK_E = 十六進位轉數字( "00000045" );
VK_L = 十六進位轉數字( "0000004C" );
VK_O = 十六進位轉數字( "0000004F" );
VK_F = 十六進位轉數字( "00000046" );
VK_R = 十六進位轉數字( "00000052" );
VK_M = 十六進位轉數字( "0000004D" );
VK_J = 十六進位轉數字( "0000004A" );
VK_M = 十六進位轉數字( "0000004D" );
VK_P = 十六進位轉數字( "00000050" );
VK_SPACE = 十六進位轉數字( "00000020" );
VK_SHIFT = 十六進位轉數字( "00000010" );
VK_RETURN = 十六進位轉數字( "0000000D" );
VK_1 = 十六進位轉數字( "00000031" );
KEYEVENTF_EXTENDEDKEY = 十六進位轉數( "00000001" ); //&H1
KEYEVENTTF_KEYDOWN = 0;
KEYEVENTF_KEYUP = 十六進位轉數字( "00000002" ); //&H2
kernel32 = 載入 Dll( "kernel32" );
kernel32 << DeclareFunction( "睡眠", 約定( STDCALL ), Alias( "睡眠" ),
Arg( Int32, "dwMilliseconds" ),
返回(無效)); //如果函數成功,回傳值非零。
user32 = 載入Dll(“User32”);
user32 << DeclareFunction( "FindWindowA", 約定( STDCALL ), Alias( "FindWindow2" ),
Arg( UInt32, 輸入, "lpClassName" ),
Arg(AnsiString(200),輸入,「lpCaption」),
返回(UIntPtr)
); // hWnd
user32 << DeclareFunction( "SetForegroundWindow", 約定( STDCALL ), Alias( "SetForegroundWindow" ),
arg( UIntPtr, "hWnd" ),
返回(UInt32)
);
user32 << DeclareFunction( "keybd_event", 約定( STDCALL ), Alias( "keybd_event" ),
Arg( UInt8, "bVk" ), //[in] 指定虛擬鍵碼。 該代碼必須是 1 到 254 範圍內的值。 有關完整列表,請參閱虛擬鍵代碼。
arg( UInt8, "bScan" ),
arg( UInt32, "dwFlags" ),
Arg( UIntPtr, "dwExtraInfo" ),
返回(無效));
user32 << DeclareFunction( "GetKeyState", 約定( STDCALL ), Alias( "GetKeyState" ),
Arg( Int32, "nVirtKey" ), //[in] 指定虛擬鍵。 如果所需的虛擬鍵是字母或數字(A 到 Z、a 到 z 或 0 到 9),則必須將 nVirtKey 設定為該字元的 ASCII 值。 對於其他鍵,它必須是虛擬鍵代碼。
返回( Int32 ) ); //傳回值指定指定虛擬按鍵的狀態,如下:
//如果高位為1,則按鍵按下;否則,就結束了。
//如果低位元為1,則按鍵切換。 諸如 CAPS LOCK 鍵之類的按鍵在開啟時會被切換。 如果低位為 0,則按鍵關閉且未切換。 當按鍵被切換時,鍵盤上的切換鍵的指示燈(如果有)將亮起;當按鍵未切換時,鍵盤上的指示燈將熄滅。
shell32=載入Dll(“shell32”);
shell32 << DeclareFunction( "ShellExecuteA", 約定( STDCALL ), Alias( "ShellExecute" ),
Arg( UIntPtr, 輸入, "hWnd" ),
Arg( AnsiString( 20 ), "lpOperation" ),
arg( AnsiString( 256 ), "lpFile" ),
Arg( AnsiString( 256 ), "lpParameters" ),
/* Arg( UInt32, "lpParameters" ), */
arg( UInt32, "lpDirectory" ),
arg( UInt32, "nShowCmd" ),
返回(UInt32)
); //如果函數成功,則傳回大於32的值。
儲存文字檔( "C:\temp\deleteme.txt", "'Hello World' from JMP" );
目錄名 = "C:\temp";
fname = "C:\temp\deleteme.txt";
// 在記事本中開啟
rc = shell32 << ShellExecute( 0, "開啟", "notepad.exe", " ", 0, 1 );
lpCaption = "無標題-記事本";
rc = kernel32 << 睡眠( 2 ); // 暫停以讓記事本打開
// 在Excel中開啟
//rc = shell32 << ShellExecute( 0, "開啟", "Excel.exe", " ", 0, 1 );
//lpCaption = "Microsoft Excel - Book1";
// 等待開啟
rc = kernel32 << 睡眠( 200 ); // 暫停以讓記事本打開
hWnd = user32 << FindWindow2( 0, lpCaption );
rc = user32 << SetForegroundWindow( hWnd );
鍵 = 函數( { l_key },
user32 << keybd_event( l_key, 0, 0, 0 ); // 按鍵
user32 << keybd_event( l_key, 0, KEYEVENTF_KEYUP, 0 ); // 釋放鍵
);
user32 << keybd_event( VK_SHIFT, 0, 0, 0 ); // 按鍵
鍵(VK_H);
user32 << keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0 ); // 釋放鍵
密鑰(VK_E);
密鑰(VK_L);
密鑰(VK_L);
鍵(VK_O);
鍵(VK_SPACE);
鍵(VK_F);
密鑰(VK_R);
鍵(VK_O);
密鑰(VK_M);
鍵(VK_SPACE);
user32 << keybd_event( VK_SHIFT, 0, 0, 0 ); // 按鍵
密鑰(VK_J);
密鑰(VK_M);
密鑰(VK_P);
密鑰(VK_1);
user32 << keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0 ); // 釋放鍵
鍵(VK_RETURN);
user32 << UnloadDll( );
shell32 << UnloadDll( );
kernel32 << UnloadDll();