2012-04-22 9 views
0

Windows APIを使用してタスクバーの位置/幅/高さを設定することはできますか? 私は3台のモニターを稼働させています。タスクバーがすべてのモニターにまたがっていないようにしたいのです。タスクバーの位置を設定するWin7 C++

これまで私が試みたのは運がなかったからです...私のコードに何か問題があるのか​​、それともブロックされているのか分かりません。

#include <iostream> 
#include "Windows.h" 

using namespace std; 

class MyClass 
{ 
public: 
    int getTaskBarHeight(); 
    void setTaskBarPos(); 
}; 

int MyClass::getTaskBarHeight() 
{ 
    RECT rect; 
    HWND taskBar = FindWindow(L"Shell_traywnd", NULL); 
    if(taskBar && GetWindowRect(taskBar, &rect)) { 
     return rect.bottom - rect.top; 
    } 
} 

void MyClass::setTaskBarPos() 
{ 
    RECT rect; 
    HWND taskBar = FindWindow(L"Shell_traywnd", NULL); 
    if(taskBar && GetWindowRect(taskBar, &rect)) { 

     SetWindowPos(taskBar, HWND_TOPMOST, 0, 0, 1080, 46, SWP_NOZORDER); 

    } 
} 

int main(void) 
{ 
    MyClass taskbar; 
    cout << taskbar.getTaskBarHeight(); 

    taskbar.setTaskBarPos(); 

    int a; 
    cin >> a; 
} 
+1

Windowsの通常の設定/コントロールパネルの領域を欲しがるように制約する方法がない場合は、適切なプログラマチックインターフェイスがあると思われます。タスクバーに干渉する任意のプログラムが良い一般的な体験ではない。 –

+0

このコメントは話題にはなりませんが、クラスのコンセプトを正しく理解していないようです。ウィンドウハンドルは、メンバ関数内のローカル変数ではなく、クラスMyClassのメンバ変数である必要があります。 – user877329

+0

あなたはtaskBarでハンドルを見つけましたか? – user877329

答えて

0

「3つすべてのディスプレイにまたがるスパニング」の質問に答えるには、通常はディスプレイアダプターの設定に従います。 3つの個別のディスプレイ(1つのモニタにつき1つ)、または1つの大きなディスプレイを3つのモニタ全体にまたがることができます。後者はあなたの状況のように聞こえますが、Windowsではアプリケーションバーがディスプレイの一部を占めるには至りません。

あなたの最善の策は、1つの大きなディスプレイではなく、3つの個別ディスプレイを作成するようにディスプレイドライバを調整することです。

+0

nVidiaコントロールパネルのSLiオプション(ベータ版)は実際にどのように動作しているかわからないので、スタートバーを実際にサイズ変更して移動します。しかし、それはそれを中央の所定の場所に固定し、画面の塗りつぶしアプリケーションで問題を引き起こしています。 – FallingReign

+0

正確にはなぜそうすべきではないのですか?アプリケーションバーは、その一部ではなく、単一のディスプレイの全エッジを使用します。 – Deanna

+0

しかし、nVidiaは実際には私の3台のモニタの1/3を使ってタスクバーを持っています(単一のディスプレイとして扱われます)。 – FallingReign

関連する問題