小编use*_*240的帖子

Windows窗体中的Powershell进度条

我正在尝试向powershell中的表单添加进度条.我不想使用PowerShell的Write-Progress cmdlet(因为当我从命令行运行脚本时,它显示了一个基于文本的进度条,我总是想要一个基于表单/图形的栏).

我试过这个似乎工作(在网上找到):

[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null

$form_main = New-Object System.Windows.Forms.Form
$progressBar1 = New-Object System.Windows.Forms.ProgressBar
$timer1 = New-Object System.Windows.Forms.Timer

$timer1_OnTick = {
  $progressBar1.PerformStep()
}

$form_main.Text = 'ProgressBar demo'

$progressBar1.DataBindings.DefaultDataSourceUpdateMode = 0
$progressBar1.Step = 1
$progressBar1.Name = 'progressBar1'

$form_main.Controls.Add($progressBar1)

$timer1.Interval = 100
$timer1.add_tick($timer1_OnTick)
$timer1.Start()

$form_main.ShowDialog()| Out-Null
Run Code Online (Sandbox Code Playgroud)

但是,我不希望事件更新进度条(如上例中的$ timer1_OnTic)我想通过在整个脚本中调用来自行更新它,例如:

$progressBar1.PerformStep()
Run Code Online (Sandbox Code Playgroud)

要么

$progressBar1.Value = 10
Run Code Online (Sandbox Code Playgroud)

因此,似乎我需要某种后台工作程序,只要我调用PerformStep()或更改progressBar的值,就会更新进度条

调用ShowDialog会停止脚本内的所有处理,直到表单关闭.

powershell

5
推荐指数
1
解决办法
2万
查看次数

有没有办法以编程方式判断系统是否启用了触控功能?

我试图弄清楚如何以编程方式判断Windows 7机器是否启用了触控功能.是否有任何触摸API(托管或非托管)可以帮助我实现这一目标?或者我可以检查注册表中的某些内容?

.net c# winapi touch windows-7

5
推荐指数
1
解决办法
2989
查看次数

如何获取Windows 7主题名称

Windows 7附带了几个内置主题.可以通过右键单击桌面并选择"个性化"来访问它们.在Personalize下,有一个名称为"航空主题"的部分包含"建筑","自然"等主题.

我尝试使用uxtheme.dll的GetCurrentThemeName,但它实际上给出了样式名称:"C:\ Windows\resources\Themes\Aero\Aero.msstyles",除非我当前的主题设置为Windows Basic,在这种情况下它返回一个空字符串.是否有实际返回主题名称的API,如"自然""建筑"等......?

我尝试的代码如下:

[DllImport("uxtheme", ExactSpelling = true, CharSet = CharSet.Unicode)] 
public extern static Int32 GetCurrentThemeName(StringBuilder stringThemeName, 
    int lengthThemeName, StringBuilder stringColorName, int lengthColorName, 
    StringBuilder stringSizeName, int lengthSizeName);

    StringBuilder stringThemeName = new StringBuilder(260);
    StringBuilder stringColorName = new StringBuilder(260);
    StringBuilder stringSizeName = new StringBuilder(260);

    Int32 s = GetCurrentThemeName(stringThemeName, 260,stringColorName, 260,stringSizeName, 260);
Run Code Online (Sandbox Code Playgroud)

c# winapi

5
推荐指数
1
解决办法
1879
查看次数

从c#调用powershell函数的问题

我正在尝试调用powershell文件中的函数,如下所示:

    string script = System.IO.File.ReadAllText(@"C:\Users\Bob\Desktop\CallPS.ps1");

    using (Runspace runspace = RunspaceFactory.CreateRunspace())
    {
        runspace.Open();
        using (Pipeline pipeline = runspace.CreatePipeline(script))
        {
            Command c = new Command("BatAvg",false); 
            c.Parameters.Add("Name", "John"); 
            c.Parameters.Add("Runs", "6996"); 
            c.Parameters.Add("Outs", "70"); 
            pipeline.Commands.Add(c); 

            Collection<PSObject> results = pipeline.Invoke();
            foreach (PSObject obj in results)
            {
                // do somethingConsole.WriteLine(obj.ToString());
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

powershell函数在CallPS.ps1中:

Function BatAvg
{
    param ($Name, $Runs, $Outs)
    $Avg = [int]($Runs / $Outs*100)/100 
    Write-Output "$Name's Average = $Avg, $Runs, $Outs "
}
Run Code Online (Sandbox Code Playgroud)

我收到以下异常:

术语"BatAvg"不被识别为cmdlet,函数,脚本文件或可操作程序的名称.

我承认,我做错了什么,我对PowerShell知之甚少.

c# powershell

5
推荐指数
1
解决办法
6320
查看次数

找不到路径'C:\\ Windows \\ System32 \\ oobe \\ info \\ Backgrounds的一部分

我试图在C:\ Windows\System32\oobe\info\Backgrounds下列出Windows 7上的所有文件,方法是调用以下内容:

const string logonScreenBackgroundPath = "C:\\Windows\\System32\\oobe\\info\\Backgrounds";
DirectoryInfo dInfo = new DirectoryInfo(logonScreenBackgroundPath);
string[] backgroundFiles = Directory.GetFiles(logonScreenBackgroundPath);
Run Code Online (Sandbox Code Playgroud)

但是我在GetFiles调用上遇到异常:找不到路径'C:\ Windows\System32\oobe\info\Backgrounds的一部分

我验证了文件夹存在并且有文件,我在命令提示符下cd,它一切都很好,但c#调用失败.

在C:\ Windows\System32\oobe \上调用GetFiles可以正常工作.文件夹属性在\ oobe和\ info之间没有什么不同.

经过进一步调查后,这看起来像64位问题.当我为"AnyCpu"构建项目时,找到了没有问题的文件夹.问题是我的项目必须为x86编译,而不是由于依赖项而编译AnyCpu.

解决方案:看起来这是一个已知问题,MS已经为它发布了一个修补程序.问题是由于文件系统重定向.

我现在使用以下命令禁用调用线程上的重定向:

[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);

IntPtr ptr = new IntPtr();
bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);
Run Code Online (Sandbox Code Playgroud)

.net c# windows-7

4
推荐指数
1
解决办法
6060
查看次数

SetWindowPos / MoveWindow持续存在的问题

我正在使用SetWindowPosMoveWindow调整窗口大小和居中。它可以正常工作,但是在Windows Media Player或“控制面板”等几个窗口上,当您关闭窗口并再次打开它时,新的调整大小/移动不会反映出来。手动调整大小时,更改将在下次打开窗口时反映出来。即使我打电话UpdateWindow,更改也不会反映出来。我需要发送窗口以便保存更改吗?有RedrawWindow帮助吗?谢谢?

.net c# windows winapi window-position

1
推荐指数
1
解决办法
2779
查看次数

当前会话的IDENT_CURRENT等价物

我需要在特定的表中获取最后一个插入行以严格控制当前会话.我不能使用@@IDENTITY,SCOPE_IDENTITY()因为他们将返回任何表的最后插入的标识.问题IDENT_CURRENT是它将返回特定表的记录的最后插入标识,但是对于任何会话.这对我来说是一个问题,因为它INSERT是由多个会话调用的,我特别需要我的特定会话的最后插入记录的标识.

任何指针如何实现这一目标?

PS.该INSERT声明不在SPROC内部,因此SPROC解决方案不可行.

谢谢

sql t-sql sql-server

1
推荐指数
1
解决办法
574
查看次数

标签 统计

c# ×5

.net ×3

winapi ×3

powershell ×2

windows-7 ×2

sql ×1

sql-server ×1

t-sql ×1

touch ×1

window-position ×1

windows ×1