nonocast

Digital Life

Browsing Posts published by nonocast

acure

No comments

Reference from:  http://www.acure-fun.net/about/index.html
结合在Unilever看到的VR,目前可以感觉到Digital Retail的趋势。
如果数字化还只是专注于辅助性质的营销,像传统的Digital Signage显示广告的模式还是会因为成本等等等因素而被cut掉;要想坚挺,那么必须也不得不将数字化推向营销第一线,类似acure这样的vending machine真的拥有很大的想象空间。

PowerPoint很容易在Slide中插入一个Video,但Video和Image不同的是,Video属于外部链接,不像Image会嵌到ppt(x)文件中。
换句话说,如果仅仅将ppt(x)文件给别人(usb-key或是mail),那么别人是无法看到其中的Video的。
做了几个小的实验,发现如下现象:
1. ppt(x)中会记录Video的LocalPath,如果你将你电脑上的D:\videos\test.wmv放入这个ppt(x),那么ppt(x)会记住这个路径。
2. 如果你把D:\videos\test.wmv删除,那么ppt(x)则无法播放这个Video。
3. 如果你把D:\videos\test.wmv剪切(cut)到ppt(x)所在目录,则又能播放。
4. 如果你把另外一个video以test.wmv的名字放到ppt(x)所在目录,并且把D:\videos\test.wmv删除,则ppt(x)播放替换的Video。

有点绕,其实就一句话,
当你给别人PowerPoint的时候,除了采用Publish CD的方式,同样可以将Video copy到ppt(x)同一目录下解决Video Link的问题。

该有的都有了,包括了WM_*和参数Enum
Win32.cs
鼠标键盘模拟操作
Simulation.cs
鼠标键盘Hook
MouseKeyboardHook.dll

通过VS2010创建Windows Service真的很简单,看图说话,

然后在OnStart和OnStop中填空即可,第二部是配置Service,通过在Service的Design视图右键Add Installer,然后打开Installer进行配置,如图,

Build后就生成了service的exe,这里提一下和非service exe的区别,
1. 不能F5直接运行,需要通过命令行安装到service中,如下:
installutil YourService.exe
卸载service
installutil /u YourService.exe
你可以通过bat来制作安装/卸载的script
2. ‘运行’中输入services.msc可以快速打开’服务’控制台
通过命令’net start YourService’启动你的service,反之’net stop YourService’来关闭。
3. 很多TX抱怨service会很隐晦,不方便调试之类的,童鞋,请使用微软牌日志,药到病除。

如果一个目录文件如下:

  • 幻灯片1
  • 幻灯片2
  • 幻灯片3
  • 幻灯片4
  • 幻灯片10
  • 幻灯片11
  • 幻灯片12

在程序中当你需要枚举显示这些文件时,写下如下代码:

foreach (var each in Directory.GetFiles(@"c:\theFolder")) {
	Console.WriteLine(each);
}

显示结果不能说奇怪,只是说一定和你期望值有差距,如下

  • 幻灯片1
  • 幻灯片10
  • 幻灯片11
  • 幻灯片12
  • 幻灯片2
  • 幻灯片3
  • 幻灯片4

怎么解决?竟然需要动用API, StrCmpLogicalW
增加Sort,如下

List files = new List(Directory.GetFiles(@"c:\theFolder"));
files.Sort(new StringLogicalComparer());
foreach (var each in files) {
	Console.WriteLine(each);
}

StringLogicalComparer代码如下:

public class StringLogicalComparer : IComparer {
	[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
	public static extern int StrCmpLogicalW(string x, string y);

	public int Compare(string x, string y) {
		return StrCmpLogicalW((string)x, (string)y);
	}
}

Everything is OK. Enjoy it.

BItmapImage默认情况下是不会进行Preload,之前google竟然也没有什么办法,本来考虑尝试一下thumbnail,隔天再想这个问题突然灵光一闪,Yes,MemoryStream。

<MediaElement x:Name=”video” MediaEnded=”video_MediaEnded” Stretch=”Fill” LoadedBehavior=”Manual” />
增加MediaEnded事件响应,事件响应代码如下:

private void video_MediaEnded(object sender, RoutedEventArgs e) {
	this.video.Position = TimeSpan.FromSeconds(0);
	this.video.Play();
}

关键是需要重置video的Position。

string path = @"D:\Snow.Leopard\Snow-Leopard-Prowl.jpg";
Console.WriteLine(File.Exists(path));
Console.WriteLine(File.Exists(new Uri(path).LocalPath));

string uri = @"file:///D:/Snow.Leopard/Snow-Leopard-Prowl.jpg";
Console.WriteLine(File.Exists(uri));
Console.WriteLine(File.Exists(new Uri(uri).LocalPath));

Output:

  • True
  • True
  • False
  • True